/*
This source file is part of the open source TripleGasm project
Copyright (C) 2010 Roma Kovalev

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

For the latest info, see http://code.google.com/p/triplegasm
You can contact the author(s) via e-mail: endiannesz@gmail.com
*/

#pragma once
#ifndef TRIPLEGASM_HPP
#define TRIPLEGASM_HPP

#include <vector>
#include <Ogre.h>
#include "core.hpp"
#include "ball.hpp"
#include "manipulator.hpp"

namespace TripleGasm
{
  class Project : public Core
  {
  public:
    Project();
    ~Project();

  protected:
    virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);

    virtual void Create();

    virtual bool keyPressed(const OIS::KeyEvent &arg);

    virtual bool keyReleased(const OIS::KeyEvent &arg);

    virtual bool mouseMoved(const OIS::MouseEvent &arg);

#ifdef _DEBUG
    virtual void DialogData();
#endif

    void buttonHit(OgreBites::Button* pButton);

    void HideMenu();

    void ShowMenu();

    std::vector<Ball*> mSpheres;
    Ogre::Real mTimeTillNextSphere;
    Manipulator mManipulator;
    BaseSphere* mpDebugSphere;
    Ogre::RaySceneQuery* mpRay;
    bool mIsPaused;
    bool mIsHelpMenu;
    OgreBites::Button* mpButtonExit;
    OgreBites::Button* mpButton2D;
    OgreBites::Button* mpButton3D;
    OgreBites::Button* mpButtonOptions;
    OgreBites::Button* mpButtonScores;
    OgreBites::Button* mpButtonOk;
    OgreBites::Button* mpButtonContinue;
    OgreBites::Button* mpButtonHelp;
#ifdef _DEBUG
    OgreBites::ParamsPanel* mpDetailsPanel;
#endif
    OgreBites::SelectMenu* mpRendererMenu; /**<Render system selection menu.*/
  };
}

#endif